\thusetup{
  %******************************
  % 注意：
  %   1. 配置里面不要出现空行
  %   2. 不需要的配置信息可以删除
  %******************************
  %
  %=====
  % 秘级
  %=====
  secretlevel={秘密},
  secretyear={10},
  %
  %=========
  % 中文信息
  %=========
  ctitle={C程序接口误用缺陷\\静态检测技术研究},
  cdegree={工学博士},
  cdepartment={软件学院},
  cmajor={软件工程},
  cauthor={谷祖兴},
  csupervisor={顾明教授},
  % cassosupervisor={孙家广教授}, % 副指导老师
  %ccosupervisor={某某某教授}, % 联合指导老师
  % 日期自动使用当前时间，若需指定按如下方式修改：
  % cdate={超新星纪元},
  %
  % 博士后专有部分
  cfirstdiscipline={计算机科学与技术},
  cseconddiscipline={系统结构},
  postdoctordate={2009年7月——2011年7月},
  id={编号}, % 可以留空： id={},
  udc={UDC}, % 可以留空
  catalognumber={分类号}, % 可以留空
  %
  %=========
  % 英文信息
  %=========
  etitle={Static Analysis Based API-Misuse Defect Detection in C Programs},
  % 这块比较复杂，需要分情况讨论：
  % 1. 学术型硕士
  %    edegree：必须为Master of Arts或Master of Science（注意大小写）
  %             “哲学、文学、历史学、法学、教育学、艺术学门类，公共管理学科
  %              填写Master of Arts，其它填写Master of Science”
  %    emajor：“获得一级学科授权的学科填写一级学科名称，其它填写二级学科名称”
  % 2. 专业型硕士
  %    edegree：“填写专业学位英文名称全称”
  %    emajor：“工程硕士填写工程领域，其它专业学位不填写此项”
  % 3. 学术型博士
  %    edegree：Doctor of Philosophy（注意大小写）
  %    emajor：“获得一级学科授权的学科填写一级学科名称，其它填写二级学科名称”
  % 4. 专业型博士
  %    edegree：“填写专业学位英文名称全称”
  %    emajor：不填写此项
  edegree={Doctor of Philosophy},
  emajor={Software Engineering},
  eauthor={Gu Zuxing},
  esupervisor={Professor Gu Ming},
  % eassosupervisor={Professor Sun Jiaguang},
  % 日期自动生成，若需指定按如下方式修改：
  % edate={December, 2005}
  %
  % 关键词用“英文逗号”分割
  %ckeywords={API误用, 静态分析, 调研, 缺陷检测},
  %ekeywords={API misuse, Static analysis, Empirical study, Bug detection}
}

% 定义中英文摘要和关键字
\begin{cabstract}
  软件库是一套用于软件开发的数据和编程代码的组合，通过应用编程接口对已实现的功能进行封装，
  令开发者专注于创新，
  为现代软件提供基础构造模块。
  开发人员在使用这些接口时，需要满足各种各样的使用约束，例如调用条件和调用顺序。
  否则，将会产生接口误用。
  近年来，很多研究人员致力于接口误用缺陷检测。
  其中，静态检测技术可以在开发早期应用而获得广泛关注。
  然而，快速发展的市场需求、复杂的使用模式和大量开源软件库中缺失的说明文档，
  给接口正确使用带来新的挑战。
  接口误用依旧普遍存在于软件系统中，是导致软件错误、系统崩溃和漏洞的重要原因之一。
  为提高接口误用检测的能力，应对项目需求，
  本文以C程序为载体，从面向接口使用约束的领域特定描述方法、规模化静态检测方法和实际项目应用三个方面展开研究，
  主要内容包括：
  \begin{enumerate}
  	\item 提出基于缺陷模式的接口使用约束领域特定语言IMSpec。
  	首先，为理解C程序接口误用缺陷特征，
  	本文对实际开源项目的接口误用缺陷修复报告进行研究，总结常见接口误用缺陷模式。
  	基于缺陷模式的特征，本文提出面向接口使用约束的领域特定语言IMSpec，
  	以描述实际项目中接口使用约束。
  	\item 提出基于约束描述的规模化接口误用缺陷检测方法IMChecker。
  	该方法利用IMSpec语言以支持用户自定义的接口，提升检测能力；
  	通过多入口分析策略将大规模代码静态分析任务分解为独立的子任务，以应对实际项目需求；
  	并基于上下文的语义信息以及基于使用情况的统计信息两种策略对检测结果进行过滤与排序。
  	在公开数据集上的实验结果显示，IMChecker取得13.21\%的误报率和16.80\%的漏报率。
  	该结果领先于主流的开源静态分析工具。
  	\item 整理C程序接口误用缺陷数据集APIMU4C以及实现C程序接口误用缺陷检测工具集Tsmart-IMChecker。
  	APIMU4C包含调研中分析的缺陷实例和C程序接口误用测试数据集，以帮助研究人员和开发者更好的理解接口误用缺陷、评估检测工具的能力以及展开新的研究工作。
  	Tsmart-IMChecker包含可视化规约撰写工具、缺陷分析引擎IMChecker-engine以及基于差异性对比的结果展示工具，以帮助使用者对接口误用缺陷进行检测。
  \end{enumerate}
  
  本文的研究成果均已集成于可信软件工具集TsmartV3中，并成功应用于Linux内核、OpenSSL加密库、Ubuntu系统的应用软件等项目中。在提交的75个新的缺陷报告中，61个已经被开发者确认，32个被开发者修复。
  
  %{\heiti 关键词：API误用；静态分析；调研；缺陷检测}
\end{cabstract}

% 如果习惯关键字跟在摘要文字后面，可以用直接命令来设置，如下：
\ckeywords{API误用；静态分析；实证研究；缺陷检测}

\begin{eabstract}
   A software library is a suite of data and programming code, which provides Application Programming Interfaces (APIs) to encapsulate the internal states. 
   It allows developers to focus on innovation and provide primary building blocks for modern software products.
   Correct usage is required to satisfy rich constraints, such as call conditions or call orders, and violation of these constraints, called API misuses.
   Recently, many tools, techniques and methodologies have been proposed to address API-misuse problems. 
   In particular, static analysis techniques have long prevailed as the most promising techniques, since they are typically available early in the development process.
   In the face of rapidly growing market needs, complex usage patterns and great missing documents of open-source APIs, 
   it becomes a challenging task.
   As a result, API misuses remain widespread and are a prevalent cause of software bugs, crashes, and vulnerabilities.
   In this paper, we aim to augment the current analysis abilities for C programs of real-world programs from three perspectives, including a domain-specific language for API usage constraints description, 
   a constraint-directed static analysis technique for large-scale programs,
   and dataset and GUI clients applied to real-world programs.
   Our main contributions are summarized as follows,
   \begin{enumerate}
   	\item A domain-specific language called IMSpec to specify API-usage constraints.
   	We conduct an empirical study to understand the characteristics
   	of API-misuse bugs in real-world C programs.
   	Leveraging this knowledge, we design a lightweight domain-specific language called IMSpec to specify API-usage constraints of real-world APIs.
   	\item A constraint-directed static analysis technique IMChecker for large-scale programs.
   	We propose IMChecker, a constraint-directed static analysis technique, which employs IMSpec for project-specific APIs, a multiple-entry analysis strategy for large-scale programs, and context semantic and usage statistics to filter and rank detection results.
   	The experimental results on standard benchmarks show that IMChecker achieves 13.21\% false-positive rate and 16.80\% false-negative rate, 
   	which outperform the state-of-the-art tools.
   	\item A dataset APIMU4C and a GUI toolkit Tsmart-IMChecker for API-misuse detection.
   	APIMU4C includes all the API-misuse instances in empirical study and a benchmark for researchers and developers to understand the nature of API misuses, evaluate current detection tools and improve API-misuse detectors.
   	We implement Tsmart-IMChecker, a GUI toolkit to help developers write IMSpec, use IMChecker engine and audit detection results.
   \end{enumerate}

	Our approaches have integrated to TsmartV3 toolkit and successfully applied to real-world programs, such as Linux kernel, OpenSSL and applications of Ubuntu system.
	For all 75 submitted bug reports, 61 have been confirmed by relevant development communities, 32 of which have been fixed and merged into master branch.
	
	%\noindent\textbf{Key Words:} API misuse; Static analysis; Empirical study; Bug detection
\end{eabstract}
\ekeywords{API misuse; Static analysis; Empirical study; Bug detection}
